ofsp2026 19_firstSol
Created time
Mar 28, 2026 08:33 AM
type
Post
status
Published
date
Mar 28, 2026
slug
ofsp2026 19_firstSol
summary
tags
ofsp2026
OpenFOAM
category
post
icon
password
Place
Last edited time
Mar 28, 2026 09:15 AM
Important
访问 https://aerosand.cc 以获取最近更新。
0. 前言
通过前面两个阶段的讨论,我们已经大概熟悉了 OpenFOAM 中数值应用的架构,熟悉了数值计算的关键要素(时间、网格、场),也熟悉了一些编程的语法、一些工作流程。下面我们使用所掌握的工具,尝试写一个最简单的 OpenFOAM 求解器(不涉及数值算法)。
计算流体力学的通用基本方程为
我们使用 \phi 表示待求物理场,注意不要和 OpenFOAM 中常见的通量 phi 误会。
为了简单起见,我们考虑如下控制方程
可见,这是一个瞬态不可压无源输运问题。
我们尝试对此控制方程进行编程求解。
本文主要讨论
完善脚本写法
简单理解方程构建和代码的对应关系
理解数值计算的简单流程
编译运行 firstSol 项目
1. 项目准备
终端输入命令,建立项目
测试初始求解器,提供脚本和说明。
为了进一步方便测试算例,我们将脚本分成四个部分
- 前处理 casepre
- 备份和恢复初始条件
- 划分网格(可选)
- 设置区域(可选)
- 等等
- 计算处理 caserun
- 使用求解器对算例计算
- 后处理 casepost
- 计算结果后处理(可选)
- 计算结果可视化
- 计算清理 caseclean
- 清理测试算例
- 还原算例到初始状态
Note
后续脚本非特别说明,暂时直接拷贝此版本即可。
前处理 casepre 如下
计算处理 caserun 如下
后处理 casepost 如下
计算清理 caseclean 如下
2. 场的接入
场的接入 createFields.H 如下
3. 方程构建
我们修改主源码,来实现一次数学方程的计算。
主源码 ofsp_19_firstSol.C 如下
可以看到数学方程和编程语言的对应,即
对应于
3.1. 时间项
时间项的构造显然是使用了函数
ddt()我们查找这个函数(或者通过
OFextension 插件直接访问代码)为了帮助理解,从代码声明
fvmDdt.C 中摘取几处代码简单讨论如下(不建议继续深究代码,代码挖的太深无益于主要学习的推进)我们了解了此函数的形参类型,也明白了返回的是
fvMatrix 类型的变量,数学上对应的是和待求量A相关的矩阵。3.2. 对流项
对流项的构造使用了函数
div()我们查找这个函数(或者通过
OFextension 插件直接访问代码)为了帮助理解,从代码声明
fvmDiv.C 中摘取几处代码简单讨论如下(不建议继续深究代码,代码挖的太深无益于主要学习的推进)我们了解了此函数的形参类型,也明白了返回的是
fvMatrix 类型的变量,数学上对应的是和待求量A相关的矩阵。3.3. 扩散项
扩散项的构造使用了函数
laplacian()我们查找这个函数(或者通过
OFextension 插件直接访问代码,不再赘述)同样的,摘取部分代码如下
同样的,我们了解了此函数的形参类型,也明白了返回的是
fvMatrix 类型的变量,数学上对应的是和待求量A相关的矩阵。3.4. 方程求解
离散方程最后形式为
对流项和扩散项的矩阵相加,构成了待求左侧项,因为没有源项,所以右侧项置空为零,可以缺省不写。
对流项和扩散项组建在一起,并通过
solve() 函数进行求解求解函数的代码实现,暂不深究。
4. 调整算例
因为项目中加入了未知场 A 的计算,所以需要调整算例。
4.1. 初始场A
为项目提供初始场A,如下
4.2. transportProperties
为 transportProperties 字典添加新的扩散系数
4.3. fvSchemes
为数值计算项指定离散格式,检查保证有以下指定
具体指定背后的数学物理是什么,暂不深究。
4.4. fvSolution
为线性代数系统指定代数求解器,检查保证有以下指定
具体指定背后的数学物理是什么,暂不深究。
5. 编译运行
编译并运行此项目
通过计算,我们得到了一个时间步的计算结果。通过 paraview 将结果可视化,可以选择查看该时间步的 A 场分布情况。
6. 完整问题
在简单了解了 OpenFOAM 如何构建方程之后,我们继续将完整考虑上述问题
6.1. 问题描述
在一个与 cavity 算例相同的方形容器中,对于速度场来说,上边界有速度 U_{x}=1m/s ,其他边界为固定边界(无法向速度交换)。对于某种无单位的A场来说,内计算域为500,上边界为100,其他边界为0。考虑以下数学物理方程描述的瞬态不可压无源输运问题。
6.2. 求解器
Loading...